package Graficos;

import javax.swing.ImageIcon;
import javax.swing.JLabel;

import Juegos.Partida;

/**
 * ProyectoX TDP 2011
 * @author  Ma Gimena Ramos- LU:82716
 * @autor Brenda Dilschneider- LU: 92774
 *
 */

public class Personaje extends JLabel implements Runnable {

	protected GraficaPersonaje actual;
	protected GraficaPersonaje quietoD;
	protected GraficaPersonaje quietoI;
	protected GraficaPersonaje derecha;
	protected GraficaPersonaje saltoD;
	protected GraficaPersonaje izquierda;
	protected GraficaPersonaje saltoI;
	protected GraficaPersonaje muerto;
	private Partida p;
	private boolean chiquito;
	private boolean tiros;
	private boolean invencible;
	private boolean cambiarMario;
	private int personajeElegido;
		
	
	/**
	 * constructor
	 * @param pat partida
	 * @param perElegido personaje elegido
	 */
	public Personaje(Partida pat,int perElegido)
	{
		super();
		personajeElegido=perElegido;
		MarioPequeño();
		p=pat;
	chiquito=true;
	tiros=false;
	cambiarMario=false;
	
	
	
	}
	
	/**
	 * va cambiando la imagen actual del personaje
	 */
	public void run() {
		while( true ) {
			try
			{
				this.setIcon(this.actual.getImage());
				Thread.sleep(100);
			}
			catch( Exception e )
			{
				System.out.println("Excepcion");
			}
		}		
	}
	
	
	/**
	 * asigna la imagen de la derecha
	 */
	public void goDerecha()
	{
		this.actual = this.derecha;
	}
	
	/**
	 * asigna la imagen del mario quieto
	 */
	public void goQuieto()
	{if (actual==derecha  || actual==saltoD)
		
		this.actual = this.quietoD;
	if (actual==izquierda || actual==saltoI)
		
		this.actual = this.quietoI;
	
	}

	/**
	 * asigna la imagen del salto
	 */
	public void goSalto(){
		if (actual== derecha || actual==quietoD)
			this.actual= this.saltoD;
		else
			this.actual= this.saltoI;
		
	}
	
	/**
	 * asigna la imagen de la izquierda
	 */
		public void goIzquierda(){
		this.actual=this.izquierda;
	}
		
		/**
		 * asigna la imagen del mario muerto
		 */
		public void morir()
		{
			this.actual = this.muerto;
		}
		
	
		/**
		 * 	aumenta el puntaje de la partida en el valor pasado por parametro	
		 * @param i puntaje a aumentar
		 */
		public void aumentarPuntaje(int i){
			p.aumentarPuntaje(i);
					}
		
		/**
		 * aumenta en 1 las vidas de mario
		 */
		public void aumentarVida(){
			p.aumentarVida();
		}
		
		/**
		 * controla el tamaño del mario
		 * @return true si el mario esta chiquito, false en caso contrario
		 */
		public boolean estachiquito(){
			return chiquito;
		}
		
		/**
		 * devuelve si el mario puede tirar tiros
		 * @return true si tiros es verdadero y falso en caso contrario
		 */
		public boolean tiraTiros(){
			return tiros;
		}
		
		/**
		 * devuelve la partida
		 * @return partida
		 */
	public Partida obtenerPartida(){
		return p;
	}
	
	/**
	 * asigna los graficos al personaje cuando es pequeño
	 */
	public void MarioPequeño(){
	if (personajeElegido==0){
		this.quietoD = new GraficaPersonaje();
		this.quietoD.addImage(new ImageIcon( getClass().getClassLoader().getResource("CMario/1.gif")) );		
		
		this.quietoI = new GraficaPersonaje();
		this.quietoI.addImage(new ImageIcon( getClass().getClassLoader().getResource("CMario/1i.gif")) );		
		
 
		this.derecha = new GraficaPersonaje();		
		this.derecha.addImage(new ImageIcon( getClass().getClassLoader().getResource("CMario/1.gif")) );
		this.derecha.addImage(new ImageIcon( getClass().getClassLoader().getResource("CMario/2.gif")) );
		

		this.izquierda = new GraficaPersonaje();		
		this.izquierda.addImage(new ImageIcon( getClass().getClassLoader().getResource("CMario/1i.gif")) );
		this.izquierda.addImage(new ImageIcon( getClass().getClassLoader().getResource("CMario/2i.gif")) );
		

		this.saltoD = new GraficaPersonaje();
		this.saltoD.addImage(new ImageIcon( getClass().getClassLoader().getResource("CMario/3.gif")) );
		
		this.saltoI = new GraficaPersonaje();
		this.saltoI.addImage(new ImageIcon( getClass().getClassLoader().getResource("CMario/3i.gif")) );
		
		this.muerto = new GraficaPersonaje();
		this.muerto.addImage(new ImageIcon( getClass().getClassLoader().getResource("FMario/4.gif")) );		
		
		this.actual = this.quietoD;
		this.setIcon(this.quietoD.getImage());}
	else{
		this.quietoD = new GraficaPersonaje();
		this.quietoD.addImage(new ImageIcon( getClass().getClassLoader().getResource("CLuigi/1.gif")) );		
		
		this.quietoI = new GraficaPersonaje();
		this.quietoI.addImage(new ImageIcon( getClass().getClassLoader().getResource("CLuigi/1i.gif")) );		
		
 
		this.derecha = new GraficaPersonaje();		
		this.derecha.addImage(new ImageIcon( getClass().getClassLoader().getResource("CLuigi/1.gif")) );
		this.derecha.addImage(new ImageIcon( getClass().getClassLoader().getResource("CLuigi/2.gif")) );
		

		this.izquierda = new GraficaPersonaje();		
		this.izquierda.addImage(new ImageIcon( getClass().getClassLoader().getResource("CLuigi/1i.gif")) );
		this.izquierda.addImage(new ImageIcon( getClass().getClassLoader().getResource("CLuigi/2i.gif")) );
		

		this.saltoD = new GraficaPersonaje();
		this.saltoD.addImage(new ImageIcon( getClass().getClassLoader().getResource("CLuigi/3.gif")) );
		
		this.saltoI = new GraficaPersonaje();
		this.saltoI.addImage(new ImageIcon( getClass().getClassLoader().getResource("CLuigi/3i.gif")) );
		
		this.muerto = new GraficaPersonaje();
		this.muerto.addImage(new ImageIcon( getClass().getClassLoader().getResource("FLuigi/4.gif")) );		
		
		this.actual = this.quietoD;
		this.setIcon(this.quietoD.getImage());}
		
	
	chiquito=true;
	
	}
	
	/**
	 * asigna los graficos al personaje cuando es grande
	 */
	public void MarioGrande(){
		if (personajeElegido==0){
		this.quietoD = new GraficaPersonaje();
		this.quietoD.addImage(new ImageIcon( getClass().getClassLoader().getResource("GMario/1.gif")) );		
		
		this.quietoI = new GraficaPersonaje();
		this.quietoI.addImage(new ImageIcon( getClass().getClassLoader().getResource("GMario/1i.gif")) );		
		
 
		this.derecha = new GraficaPersonaje();		
		this.derecha.addImage(new ImageIcon( getClass().getClassLoader().getResource("GMario/1.gif")) );
		this.derecha.addImage(new ImageIcon( getClass().getClassLoader().getResource("GMario/2.gif")) );
		

		this.izquierda = new GraficaPersonaje();		
		this.izquierda.addImage(new ImageIcon( getClass().getClassLoader().getResource("GMario/1i.gif")) );
		this.izquierda.addImage(new ImageIcon( getClass().getClassLoader().getResource("GMario/2i.gif")) );
		

		this.saltoD = new GraficaPersonaje();
		this.saltoD.addImage(new ImageIcon( getClass().getClassLoader().getResource("GMario/3.gif")) );
		
		this.saltoI = new GraficaPersonaje();
		this.saltoI.addImage(new ImageIcon( getClass().getClassLoader().getResource("GMario/3i.gif")) );
		
		this.muerto = new GraficaPersonaje();
		this.muerto.addImage(new ImageIcon( getClass().getClassLoader().getResource("FMario/4.gif")) );		
		
		this.actual = this.quietoD;
		this.setIcon(this.quietoD.getImage());}
		else{
			this.quietoD = new GraficaPersonaje();
			this.quietoD.addImage(new ImageIcon( getClass().getClassLoader().getResource("GLuigi/1.gif")) );		
			
			this.quietoI = new GraficaPersonaje();
			this.quietoI.addImage(new ImageIcon( getClass().getClassLoader().getResource("GLuigi/1i.gif")) );		
			
	 
			this.derecha = new GraficaPersonaje();		
			this.derecha.addImage(new ImageIcon( getClass().getClassLoader().getResource("GLuigi/1.gif")) );
			this.derecha.addImage(new ImageIcon( getClass().getClassLoader().getResource("GLuigi/2.gif")) );
			

			this.izquierda = new GraficaPersonaje();		
			this.izquierda.addImage(new ImageIcon( getClass().getClassLoader().getResource("GLuigi/1i.gif")) );
			this.izquierda.addImage(new ImageIcon( getClass().getClassLoader().getResource("GLuigi/2i.gif")) );
			

			this.saltoD = new GraficaPersonaje();
			this.saltoD.addImage(new ImageIcon( getClass().getClassLoader().getResource("GLuigi/3.gif")) );
			
			this.saltoI = new GraficaPersonaje();
			this.saltoI.addImage(new ImageIcon( getClass().getClassLoader().getResource("GLuigi/3i.gif")) );
			
			this.muerto = new GraficaPersonaje();
			this.muerto.addImage(new ImageIcon( getClass().getClassLoader().getResource("FLuigi/4.gif")) );		
			
			this.actual = this.quietoD;
			this.setIcon(this.quietoD.getImage());}
			
		
		chiquito=false;
		tiros=false;
	
	}
	
	/**
	 * asigna los graficos al personaje cuando agarra una flor
	 */
	public void MarioFuego(){
		if (personajeElegido==0){
	
		this.quietoD = new GraficaPersonaje();
		this.quietoD.addImage(new ImageIcon( getClass().getClassLoader().getResource("FMario/1.gif")) );		
		
		this.quietoI = new GraficaPersonaje();
		this.quietoI.addImage(new ImageIcon( getClass().getClassLoader().getResource("FMario/1i.gif")) );		
		
 
		this.derecha = new GraficaPersonaje();		
		this.derecha.addImage(new ImageIcon( getClass().getClassLoader().getResource("FMario/1.gif")) );
		this.derecha.addImage(new ImageIcon( getClass().getClassLoader().getResource("FMario/2.gif")) );
		

		this.izquierda = new GraficaPersonaje();		
		this.izquierda.addImage(new ImageIcon( getClass().getClassLoader().getResource("FMario/1i.gif")) );
		this.izquierda.addImage(new ImageIcon( getClass().getClassLoader().getResource("FMario/2i.gif")) );
		

		this.saltoD = new GraficaPersonaje();
		this.saltoD.addImage(new ImageIcon( getClass().getClassLoader().getResource("FMario/3.gif")) );
		
		this.saltoI = new GraficaPersonaje();
		this.saltoI.addImage(new ImageIcon( getClass().getClassLoader().getResource("FMario/3i.gif")) );
		
		this.muerto = new GraficaPersonaje();
		this.muerto.addImage(new ImageIcon( getClass().getClassLoader().getResource("FMario/4.gif")) );		
		
		this.actual = this.quietoD;
		this.setIcon(this.quietoD.getImage());
		}
		else{
			this.quietoD = new GraficaPersonaje();
			this.quietoD.addImage(new ImageIcon( getClass().getClassLoader().getResource("FLuigi/1.gif")) );		
			
			this.quietoI = new GraficaPersonaje();
			this.quietoI.addImage(new ImageIcon( getClass().getClassLoader().getResource("FLuigi/1i.gif")) );		
			
	 
			this.derecha = new GraficaPersonaje();		
			this.derecha.addImage(new ImageIcon( getClass().getClassLoader().getResource("FLuigi/1.gif")) );
			this.derecha.addImage(new ImageIcon( getClass().getClassLoader().getResource("FLuigi/2.gif")) );
			

			this.izquierda = new GraficaPersonaje();		
			this.izquierda.addImage(new ImageIcon( getClass().getClassLoader().getResource("FLuigi/1i.gif")) );
			this.izquierda.addImage(new ImageIcon( getClass().getClassLoader().getResource("FLuigi/2i.gif")) );
			

			this.saltoD = new GraficaPersonaje();
			this.saltoD.addImage(new ImageIcon( getClass().getClassLoader().getResource("FLuigi/3.gif")) );
			
			this.saltoI = new GraficaPersonaje();
			this.saltoI.addImage(new ImageIcon( getClass().getClassLoader().getResource("FLuigi/3i.gif")) );
			
			this.muerto = new GraficaPersonaje();
			this.muerto.addImage(new ImageIcon( getClass().getClassLoader().getResource("FLuigi/4.gif")) );		
			
			this.actual = this.quietoD;
			this.setIcon(this.quietoD.getImage());}
			
		chiquito=false;
		tiros=true;
	
	}
	
	/**
	 * asigna los graficos al personaje grande cuando agarra una estrella
	 */
	public void MarioEstrellaG(){
		if (personajeElegido==0){

		this.quietoD = new GraficaPersonaje();
		this.quietoD.addImage(new ImageIcon( getClass().getClassLoader().getResource("EMario/1.gif")) );		
		
		this.quietoI = new GraficaPersonaje();
		this.quietoI.addImage(new ImageIcon( getClass().getClassLoader().getResource("EMario/1i.gif")) );		
		
 
		this.derecha = new GraficaPersonaje();		
		this.derecha.addImage(new ImageIcon( getClass().getClassLoader().getResource("EMario/1.gif")) );
		this.derecha.addImage(new ImageIcon( getClass().getClassLoader().getResource("EMario/2.gif")) );
		

		this.izquierda = new GraficaPersonaje();		
		this.izquierda.addImage(new ImageIcon( getClass().getClassLoader().getResource("EMario/1i.gif")) );
		this.izquierda.addImage(new ImageIcon( getClass().getClassLoader().getResource("EMario/2i.gif")) );
		

		this.saltoD = new GraficaPersonaje();
		this.saltoD.addImage(new ImageIcon( getClass().getClassLoader().getResource("EMario/3.gif")) );
		
		this.saltoI = new GraficaPersonaje();
		this.saltoI.addImage(new ImageIcon( getClass().getClassLoader().getResource("EMario/3i.gif")) );
		
		this.muerto = new GraficaPersonaje();
		this.muerto.addImage(new ImageIcon( getClass().getClassLoader().getResource("FMario/4.gif")) );		
		
		this.actual = this.quietoD;
		this.setIcon(this.quietoD.getImage());}
		else{
			this.quietoD = new GraficaPersonaje();
			this.quietoD.addImage(new ImageIcon( getClass().getClassLoader().getResource("ELuigi/1.gif")) );		
			
			this.quietoI = new GraficaPersonaje();
			this.quietoI.addImage(new ImageIcon( getClass().getClassLoader().getResource("ELuigi/1i.gif")) );		
			
	 
			this.derecha = new GraficaPersonaje();		
			this.derecha.addImage(new ImageIcon( getClass().getClassLoader().getResource("ELuigi/1.gif")) );
			this.derecha.addImage(new ImageIcon( getClass().getClassLoader().getResource("ELuigi/2.gif")) );
			

			this.izquierda = new GraficaPersonaje();		
			this.izquierda.addImage(new ImageIcon( getClass().getClassLoader().getResource("ELuigi/1i.gif")) );
			this.izquierda.addImage(new ImageIcon( getClass().getClassLoader().getResource("ELuigi/2i.gif")) );
			

			this.saltoD = new GraficaPersonaje();
			this.saltoD.addImage(new ImageIcon( getClass().getClassLoader().getResource("ELuigi/3.gif")) );
			
			this.saltoI = new GraficaPersonaje();
			this.saltoI.addImage(new ImageIcon( getClass().getClassLoader().getResource("ELuigi/3i.gif")) );
			
			this.muerto = new GraficaPersonaje();
			this.muerto.addImage(new ImageIcon( getClass().getClassLoader().getResource("FLuigi/4.gif")) );		
			
			this.actual = this.quietoD;
			this.setIcon(this.quietoD.getImage());}
			
		
		
	}
	
	/**
	 * asigna los graficos al perosnaje chiquito cuando agarra una estrella
	 */
	public void MarioEstrellaC(){
		if (personajeElegido==0){
	
		this.quietoD = new GraficaPersonaje();
		this.quietoD.addImage(new ImageIcon( getClass().getClassLoader().getResource("EMarioC/1.gif")) );		
		
		this.quietoI = new GraficaPersonaje();
		this.quietoI.addImage(new ImageIcon( getClass().getClassLoader().getResource("EMarioC/1i.gif")) );		
		
 
		this.derecha = new GraficaPersonaje();		
		this.derecha.addImage(new ImageIcon( getClass().getClassLoader().getResource("EMarioC/1.gif")) );
		this.derecha.addImage(new ImageIcon( getClass().getClassLoader().getResource("EMarioC/2.gif")) );
		

		this.izquierda = new GraficaPersonaje();		
		this.izquierda.addImage(new ImageIcon( getClass().getClassLoader().getResource("EMarioC/1i.gif")) );
		this.izquierda.addImage(new ImageIcon( getClass().getClassLoader().getResource("EMarioC/2i.gif")) );
		

		this.saltoD = new GraficaPersonaje();
		this.saltoD.addImage(new ImageIcon( getClass().getClassLoader().getResource("EMarioC/3.gif")) );
		
		this.saltoI = new GraficaPersonaje();
		this.saltoI.addImage(new ImageIcon( getClass().getClassLoader().getResource("EMarioC/3i.gif")) );
		
		this.muerto = new GraficaPersonaje();
		this.muerto.addImage(new ImageIcon( getClass().getClassLoader().getResource("FMario/4.gif")) );		
		
		this.actual = this.quietoD;
		this.setIcon(this.quietoD.getImage());}
		else{
			this.quietoD = new GraficaPersonaje();
			this.quietoD.addImage(new ImageIcon( getClass().getClassLoader().getResource("ELuigiC/1.gif")) );		
			
			this.quietoI = new GraficaPersonaje();
			this.quietoI.addImage(new ImageIcon( getClass().getClassLoader().getResource("ELuigiC/1i.gif")) );		
			
	 
			this.derecha = new GraficaPersonaje();		
			this.derecha.addImage(new ImageIcon( getClass().getClassLoader().getResource("ELuigiC/1.gif")) );
			this.derecha.addImage(new ImageIcon( getClass().getClassLoader().getResource("ELuigiC/2.gif")) );
			

			this.izquierda = new GraficaPersonaje();		
			this.izquierda.addImage(new ImageIcon( getClass().getClassLoader().getResource("ELuigiC/1i.gif")) );
			this.izquierda.addImage(new ImageIcon( getClass().getClassLoader().getResource("ELuigiC/2i.gif")) );
			

			this.saltoD = new GraficaPersonaje();
			this.saltoD.addImage(new ImageIcon( getClass().getClassLoader().getResource("ELuigiC/3.gif")) );
			
			this.saltoI = new GraficaPersonaje();
			this.saltoI.addImage(new ImageIcon( getClass().getClassLoader().getResource("ELuigiC/3i.gif")) );
			
			this.muerto = new GraficaPersonaje();
			this.muerto.addImage(new ImageIcon( getClass().getClassLoader().getResource("FLuigi/4.gif")) );		
			
			this.actual = this.quietoD;
			this.setIcon(this.quietoD.getImage());}
			
		
	
	}
	
	/**
	 * retorna si el mario cambio
	 * @return true si cambio, false en caso contrario
	 */
public boolean CambioMario(){
	return cambiarMario;
}

/**
 * canbia el valor de la variable cambiarmario si esta muerto
 */
public void CambiaMario(){
	if (actual==muerto)
				cambiarMario=true;
	else
	cambiarMario=false;
}

/**
 * controla si es invencible el mario
 * @return true si es invencible, falso en caso contrario
 */
public boolean invencible(){
	return invencible;
}

/**
 * pone al mario invencible
 */
public void CambiarInvencible(){
	if (invencible==true){
		invencible=false;
		if (chiquito)
			MarioPequeño();
		else
			if (tiros)
				MarioFuego();
			else
				MarioGrande();
				}
	else
		{if (chiquito)
			MarioEstrellaC();
			else
				MarioEstrellaG();
		
		invencible=true;}
}

/**
 * cambia el tamaño del mario
 */
public void CambiarTamaño(){
	if (chiquito)
		chiquito=false;
	else
		chiquito=true;
	
}

/**
 * retorna el sentido de como se mueve el mario
 * @return 1 si va a la derecha y 0 si va a la izquierda
 */
public int obtenerSentido(){
	if (actual== this.derecha || saltoD==actual || quietoD==actual)
		return 0;
	else
		return 1;
}

/**
 * returna el personaje elegido
 * @return nro de personaje
 */
public int obtenerPersonaje(){
	return personajeElegido;
}
}

